package com.gem.day10;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 本类用来演示Java异常
 * 
 * Java异常分为两大类:
 * Error				致命错误,一旦出现,无法修复[严重]
 * Exception		程序异常,可以通过编码处理解决
 * 
 * 它们都继承于Java异常顶级父类java.lang.Throwable
 * 
 * @author easonsy
 * 2020年7月30日 上午10:36:38
 */
public class ExceptionDemo {
	public static void main(String[] args) {
		/*
		 * Exception也分为两大类
		 * 
		 * 1.RuntimeExcpetion		运行时异常,是指运行时会出现的错误情况,
		 * 											它是Exception的子类
		 * 											此类异常只要编码谨慎可以避免的!
		 * 	  例如:
		 *    ArrayIndexOutOfBoundsException
		 *    NullPointerException
		 *    ClassCastException
		 *    InputMisMatchException
		 *    NumberFormatException
		 *    ...
		 * 
		 * 											
		 * 2.Exception						非运行时异常,不需要运行,编辑器即检测出代码风险,
		 * 											无法通过编码避免,必须强制处理
		 * 	处理方式:
		 * a.抛异常			把处理异常的时机延后,延迟处理,延迟给调用者来决定如何处理;
		 * 							注意:抛异常只是延迟处理不代表不处理,如果抛到顶层(main方法),
		 * 								    程序一旦出现异常,就会崩溃,无法再处理,即异常不要抛在main上
		 * 
		 * b.捕获				当场处理异常
		 */
		//int[] arr = { 1, 2, 3 };
		//System.out.println(arr[3]);

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		//ParseException
		try {
			Date date = sdf.parse("2020-07-15");
			System.out.println(date);
		} catch (ParseException e) {
			e.printStackTrace();
			//异常处理代码...
		} finally {
			//finally无论上面代码是否有异常,最终都会执行
			System.out.println("finally");
		}
	}
}
